Managing PSD kel 3

Angga Fathan Rofiqy

2023-09-19

Setting

Function biar gak perlu ganti backslash (\) jadi slash (/).

path <- function() gsub  ( "\\\\",  "/",  readClipboard ()  )
#Copy path, Panggil function di console
#Copy r path, paste ke var yang diinginkan

Set Working Directory

Function biar gak perlu repot buat install("") atau load() package.

#                      -=( Install & Load Package Function )=-
install_load <- function (package1, ...)  {   

   # convert arguments to vector
   packages <- c(package1, ...)

   # start loop to determine if each package is installed
   for(package in packages){

       # if package is installed locally, load
       if(package %in% rownames(installed.packages()))
          do.call('library', list(package))

       # if package is not installed locally, download, then load
       else {
          install.packages(package)
          do.call("library", list(package))
       }
   } 
}

Function position_stack_and_nudge

#                          -=( GGPLOT POSITION FUNCTION )=-
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.2.3
position_stack_and_nudge <- function(x = 0, y = 0, vjust = 1, reverse = FALSE) {
  ggproto(NULL, PositionStackAndNudge,
    x = x,
    y = y,
    vjust = vjust,
    reverse = reverse
  )
}

#' @rdname ggplot2-ggproto
#' @format NULL
#' @usage NULL
#' @noRd
PositionStackAndNudge <- ggproto("PositionStackAndNudge", PositionStack,
  x = 0,
  y = 0,

  setup_params = function(self, data) {
    c(
        list(x = self$x, y = self$y),
        ggproto_parent(PositionStack, self)$setup_params(data)
    )
  },

  compute_layer = function(self, data, params, panel) {
    # operate on the stacked positions (updated in August 2020)
    data = ggproto_parent(PositionStack, self)$compute_layer(data, params, panel)

    x_orig <- data$x
    y_orig <- data$y
    # transform only the dimensions for which non-zero nudging is requested
    if (any(params$x != 0)) {
      if (any(params$y != 0)) {
        data <- transform_position(data, function(x) x + params$x, function(y) y + params$y)
      } else {
        data <- transform_position(data, function(x) x + params$x, NULL)
      }
    } else if (any(params$y != 0)) {
      data <- transform_position(data, function(x) x, function(y) y + params$y)
    }
    data$nudge_x <- data$x
    data$nudge_y <- data$y
    data$x <- x_orig
    data$y <- y_orig

    data
  },

  compute_panel = function(self, data, params, scales) {
      ggproto_parent(PositionStack, self)$compute_panel(data, params, scales)
  }
)

Theme Pie Chart.

install_load('ggrepel')
#                             -=( Label Pie Chart )=-
lab.p <- list(
  geom_label_repel( aes(label = paste0(perc,"(",n,")")),
          position = position_stack_and_nudge(vjust = 0.5, x = 0.65),
          direction='y', fontface = 'bold', color = 'white',
          box.padding = unit(0.35, "lines"),
          point.padding = unit(0.5, "lines"), segment.color = '#454545',
          size=10) 
)
#                           -=( THEME Pie Chart )=-
theme.p <- list(
  theme_void()  , 
        theme(
        text = element_text(size = 36),
        axis.text.y = element_text(vjust = .5, face = "bold"),
        plot.title = element_text(hjust = 0.5),
        plot.subtitle = element_text(hjust = 0.5) )
)

Function Pie Chart

#                           -=( Pie Chart FUNCTION )=-
plot.p <- function(dt, title = "Pice Chart"){
  install_load("ggplot2", "dplyr", "viridis", "ggrepel", "tidyverse",'scales')
  #DATA FRAME
  df <- data.frame(ket = dt) %>%
    #Frequency
    group_by(ket) %>%
    count() %>%
    ungroup() %>%
    mutate(perc = percent(n/sum(n), accuracy = 0.1, trim = FALSE))
  
  #PIE CHART
  sp <- ggplot(data=df, aes(x = "", y = n, fill = ket)) +
          geom_col(width = 1, color = "white", linewidth = 2,
                   position = position_stack()) +
        coord_polar(theta = "y") +
        scale_alpha_manual(values = c("0"=0, "1"=1, "2"=0.7), guide=F) +
        scale_x_discrete(breaks = NULL) +
        scale_y_continuous(breaks = NULL) +
        labs(title = title) + #Title
        #COLORING
        scale_fill_viridis(alpha = 0.75, #Opacity
                           begin = 0.2, #Color pallte scale begins
                           end = 0.5, #Color pallte scale ends
                           direction = -1, #Flip color scale
                           discrete = T, #Discrete Value
                           option = "D") + #Color Palette
        theme.p + #Theme
        xlab("") + ylab("") + lab.p #Labels
return(sp)
}

Tentang Data

Data kelompok kami merupakan data hasil web scraping dari laptopmedia.com dengan menggunakan extension web scraper dari chrome. Data ini memiliki 7 peubah yakni : Name (Nama laptop), Price (Harga), CPU, GPU, RAM, Display (layar), dan Storage.

Data tersebut perlu dibersihkan dan dimanage sehingga dapat di olah pada analisis selanjutnya.

Data input

install_load('readxl','dplyr','kableExtra')
## Warning: package 'dplyr' was built under R version 4.2.3
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
## 
## Attaching package: 'kableExtra'
## The following object is masked from 'package:dplyr':
## 
##     group_rows
data <- read_xlsx("data.xlsx", sheet="Laptop")
data <- data[,-c(1,2)]
cat("Jumlah Kolom:", ncol(data), "\n")
## Jumlah Kolom: 7
cat("Jumlah Baris:", nrow(data), "\n")
## Jumlah Baris: 10000
kable(head(data)) %>% kable_styling(bootstrap_options = "striped", full_width = FALSE)
Name Price CPU RAM GPU Display Storage
Lenovo ThinkPad T14 Gen 2 $146999 AMD Ryzen 7 5850U 20GB RAM AMD Radeon RX Vega 8 (R4000/5000, 15W) 14.0”, Full HD (1920 x 1080), IPS 2000GB SSD
HP 17 $111900 Intel Core i5-1335U 16GB RAM Intel Iris Xe Graphics G7 (80EU) 17.3”, Full HD (1920 x 1080), IPS 1000GB HDD
Acer Predator Triton 300 $204900 Intel Core i7-11800H 64GB RAM NVIDIA GeForce RTX 3060 (Laptop, 105W) 15.6”, Full HD (1920 x 1080), 144 Hz, IPS 4000GB SSD
ASUS Vivobook 17X $96999 AMD Ryzen 7 5800H 40GB RAM AMD Radeon RX Vega 8 (R4000/5000, 35/45W) 17.3”, Full HD (1920 x 1080), IPS 2000GB SSD
HP 17 $71299 Intel Core i5-1335U 12GB RAM Intel Iris Xe Graphics G7 (80EU) 17.3”, Full HD (1920 x 1080), IPS 1000GB SSD
Dell Vostro 7620 $157900 Intel Core i7-12700H 24GB RAM NVIDIA GeForce RTX 3050 (Laptop) 16.0”, WUXGA (1920 x 1200), IPS 512GB SSD

Cek Missing Data

Penting untuk melihat ada tidaknya missing data.

# Mencari indeks baris dan kolom yang mengandung NA
na.idx <- which(is.na(data), arr.ind = TRUE)
cat("Banyaknya data NA : ", nrow(na.idx))
## Banyaknya data NA :  9
# Menampilkan data raw dengan baris dan kolom yang mengandung NA
install_load('kableExtra','dplyr','DT')
## Warning: package 'DT' was built under R version 4.2.3
#Menampilkan tabel
kable(data[                        # Subsetting
                unique(na.idx[, 1]),   # Vektor indeks baris yang mengandung NA
                unique(na.idx[, 2])  ] # Vektor indeks kolom yang mengandung NA
      # Style Tabel
      ) %>% kable_styling(bootstrap_options = "striped", full_width = FALSE)
Display Storage
NA 256GB SSD
NA 256GB SSD
NA 512GB SSD
NA 1000GB HDD
NA 256GB SSD
NA 64GB SSD
13.3”, Full HD (1920 x 1080), IPS NA
14.0”, HD (1366 x 768), TN NA
11.6”, HD (1366 x 768), IPS NA

Hapus Data NA

Karena peubah diatas sulit untuk diduga maka kami putuskan untuk menghapus data NA tersebut.

data <- data[ -unique(na.idx[, 1]),  ]
cat("Jumlah Baris:", nrow(data), "\n")
## Jumlah Baris: 9991

1. Brand Classification

Klasifikasi brand ini diperlukan agar kita dapat melihat lebih jelas sebaran brand yang dijual pada e-commerce ini maupun untuk analisis selanjutnya.

# Install dan muat paket stringr jika belum diinstal
install_load('stringr')
## Warning: package 'stringr' was built under R version 4.2.3
# Daftar kata kunci merek
brands <- c(
    "HP", "Hewlett-Packard", "Acer", "Dell", "Lenovo", "ASUS",
    "MSI", "Alienware", "Apple", "LG", "Samsung", "Aorus", "Gigabyte",
    "Razer", "Microsoft", "Panasonic", "Chuwi", "Toshiba", "Fusion5")

# Fungsi untuk menetapkan merek berdasarkan kata kunci
assign_brand <- function(data) {
  for (brand_keywords in brands) {
    if (any(str_detect(tolower(data), tolower(brand_keywords)))) {
      return(brand_keywords[1])  # Ambil merek pertama yang cocok
    }
  }
  return("Tidak Diketahui")
}

# Menambahkan kolom brand berdasarkan fungsi
data$Brand <- sapply(data$Name, assign_brand)

# Tampilkan hasil
kable(head(data)) %>% kable_styling(bootstrap_options = "striped", full_width = FALSE)
Name Price CPU RAM GPU Display Storage Brand
Lenovo ThinkPad T14 Gen 2 $146999 AMD Ryzen 7 5850U 20GB RAM AMD Radeon RX Vega 8 (R4000/5000, 15W) 14.0”, Full HD (1920 x 1080), IPS 2000GB SSD Lenovo
HP 17 $111900 Intel Core i5-1335U 16GB RAM Intel Iris Xe Graphics G7 (80EU) 17.3”, Full HD (1920 x 1080), IPS 1000GB HDD HP
Acer Predator Triton 300 $204900 Intel Core i7-11800H 64GB RAM NVIDIA GeForce RTX 3060 (Laptop, 105W) 15.6”, Full HD (1920 x 1080), 144 Hz, IPS 4000GB SSD Acer
ASUS Vivobook 17X $96999 AMD Ryzen 7 5800H 40GB RAM AMD Radeon RX Vega 8 (R4000/5000, 35/45W) 17.3”, Full HD (1920 x 1080), IPS 2000GB SSD ASUS
HP 17 $71299 Intel Core i5-1335U 12GB RAM Intel Iris Xe Graphics G7 (80EU) 17.3”, Full HD (1920 x 1080), IPS 1000GB SSD HP
Dell Vostro 7620 $157900 Intel Core i7-12700H 24GB RAM NVIDIA GeForce RTX 3050 (Laptop) 16.0”, WUXGA (1920 x 1200), IPS 512GB SSD Dell

a. Sebaran Brand Laptop

# Membuat bar chart persentase
ggplot(data = data %>% count(Brand) %>% # banyaknya laptop brand x
  mutate(perc = round(n / sum(n) * 100)), #buat persentase
       aes(x = reorder(Brand, -n), y = perc)) +
  geom_bar(stat = "identity", fill='#2D99AE') +
  geom_text(aes(label = prettyNum(n,big.mark = ",")
                ), vjust = -0.5, size = 7, col="orange4", 
            fontface = "bold") + # Tambahkan label
  labs(x = "Brand", y = "Persentase (%)", 
       title = "Sebaran Brand Laptop") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
  scale_y_continuous(labels = scales::percent_format(scale = 1)) +
  theme_minimal() + # Tambahkan tema minimal
  theme(axis.text.x = element_text(angle = 45, hjust = 1, 
                                   margin = margin(b = 10)),
        axis.text.y = element_text(vjust = .5, face = "bold", 
                                   margin = margin(l = 20)),
        plot.title = element_text(hjust = 0.5, face = "bold"),
        text = element_text(size = 30),
        plot.subtitle = element_text(hjust = 0.5)
        ) 

b. Brand to dummy variable

Singkat nya peubah Dummy memisahkan setiap kategori ke beberapa kolom. Dengan isi 1 atau TRUE yang kategori nya sesuai, dan 0 atau FALSE untuk kategori lainnya. Seperti contoh gambar di atas.

Namun cara diatas sangat memakan waktu dan memakan memori. Untung nya R dapat mengenali lebih advance yakni dengan tipe variabel factor. Karena factor memiliki level atau urutan nilai kategori yang bisa di ubah sesuka hati. Seperti ini factor(data$Brand, levels = c('HP','Acer',...)). Namun untuk default nya, R mengurutkan berdasarkan abjad.

Terdapat Fungsi relevel() yang digunakan dalam konteks peubah dummy untuk menentukan referensi atau kategori dasar. Namun ini hanya menggantikan posisi level 1, dengan ref yang diberikan. Sisanya mengurut sesuai abjad.

Ketika membuat peubah dummy untuk variabel kategorikal dengan lebih dari dua kategori, R secara otomatis memilih satu kategori sebagai referensi dan yang lainnya sebagai peubah dummy. Referensi yang diubah dapat mempengaruhi hasil analisis regresi karena perubahan dalam perbandingan dengan referensi. Jadi, pemilihan referensi ini perlu diperhatikan dalam konteks analisis statistik.

Berikut beberapa pertimbangan untuk memilih referensi yang baik:

  1. Interpretasi yang Jelas: Pilih kelompok referensi yang mudah diinterpretasikan. Ini akan membuat hasil analisis lebih mudah dipahami. Misalnya, jika Anda menganalisis jenis produk (A, B, C), mungkin produk yang paling umum atau biasa digunakan adalah pilihan yang baik untuk referensi.

  2. Pentingnya Variabel: Pilih kelompok yang memiliki relevansi atau signifikansi tertentu dalam konteks analisis Anda sebagai referensi. Ini dapat membantu Anda memahami efek perbedaan antara kelompok tersebut dengan kelompok lain.

  3. Eksplanasi Variabel Lain: Terkadang pemilihan referensi dapat memengaruhi hasil analisis. Misalnya, dalam analisis regresi logistik, referensi dapat mempengaruhi bagaimana koefisien variabel lain diinterpretasikan.

  4. Kemudahan Analisis: Pilih kelompok referensi yang memudahkan perbandingan dengan kelompok lainnya. Ini dapat membuat hasil analisis lebih intuitif dan bermakna.

  5. Konteks Bisnis atau Penelitian: Pertimbangkan konteks bisnis atau penelitian Anda. Misalnya, jika Anda sedang melakukan penelitian pasar, referensi yang cocok mungkin adalah produk atau merek yang paling dikenal atau paling banyak digunakan di pasar.

  6. Efeknya pada Regresi: Pahami bahwa pemilihan referensi dapat mempengaruhi koefisien dan interpretasi dalam analisis regresi. Koefisien peubah dummy akan mengukur perbedaan antara kelompok referensi dengan kelompok lainnya.

  7. Perbandingan yang Relevan: Pastikan perbandingan antara kelompok lain dengan kelompok referensi memiliki makna dalam konteks analisis Anda.

Untuk peubah brand, kami memilih Brand HP Sebagai referensi, karena merupakan kategori dengan jumlah terbanyak.

data <- data %>% 
  mutate(`Brand` = relevel(as.factor(data$Brand), ref = "HP"))
str(data$Brand)
##  Factor w/ 18 levels "HP","Acer","Alienware",..: 11 1 2 6 1 8 6 6 1 11 ...
##  - attr(*, "names")= chr [1:9991] "Lenovo ThinkPad T14 Gen 2" "HP 17" "Acer Predator Triton 300" "ASUS Vivobook 17X" ...
levels(data$Brand)
##  [1] "HP"        "Acer"      "Alienware" "Aorus"     "Apple"     "ASUS"     
##  [7] "Chuwi"     "Dell"      "Fusion5"   "Gigabyte"  "Lenovo"    "LG"       
## [13] "Microsoft" "MSI"       "Panasonic" "Razer"     "Samsung"   "Toshiba"

2. Price to Numeric

Price Memiliki karakter $ yang menandakan satuan USD. Agar dapat dianalisis lebih lanjut, kami menghapus $ lalu menjadikannya sebagai peubah numerik dan membaginya dengan \(100\), karena 2 digit dari belakang merupakan cent . Selain Price (USD) agar memudahkan dalam membaca nilai mata uang, kami juga membuat peubah tambahan yakni Price (IDR) dengan mengalikan setiap \(1\) USD dengan \(15,355.40\) (Nilai \(1\) USD ke IDR Sekarang).

data <- data %>%
  mutate(`Price (USD)` = as.numeric(gsub("\\$", "", Price)) / 100,
         `Price (IDR)` =  `Price (USD)` * 15355.40 ) %>%
  select(-Price)
kable(head(data)) %>% kable_styling(bootstrap_options = "striped", full_width = FALSE)
Name CPU RAM GPU Display Storage Brand Price (USD) Price (IDR)
Lenovo ThinkPad T14 Gen 2 AMD Ryzen 7 5850U 20GB RAM AMD Radeon RX Vega 8 (R4000/5000, 15W) 14.0”, Full HD (1920 x 1080), IPS 2000GB SSD Lenovo 1469.99 22572284
HP 17 Intel Core i5-1335U 16GB RAM Intel Iris Xe Graphics G7 (80EU) 17.3”, Full HD (1920 x 1080), IPS 1000GB HDD HP 1119.00 17182693
Acer Predator Triton 300 Intel Core i7-11800H 64GB RAM NVIDIA GeForce RTX 3060 (Laptop, 105W) 15.6”, Full HD (1920 x 1080), 144 Hz, IPS 4000GB SSD Acer 2049.00 31463215
ASUS Vivobook 17X AMD Ryzen 7 5800H 40GB RAM AMD Radeon RX Vega 8 (R4000/5000, 35/45W) 17.3”, Full HD (1920 x 1080), IPS 2000GB SSD ASUS 969.99 14894584
HP 17 Intel Core i5-1335U 12GB RAM Intel Iris Xe Graphics G7 (80EU) 17.3”, Full HD (1920 x 1080), IPS 1000GB SSD HP 712.99 10948247
Dell Vostro 7620 Intel Core i7-12700H 24GB RAM NVIDIA GeForce RTX 3050 (Laptop) 16.0”, WUXGA (1920 x 1200), IPS 512GB SSD Dell 1579.00 24246177

a. Sebaran Harga Laptop

install_load('ggridges','hrbrthemes','viridis')
## Warning: package 'ggridges' was built under R version 4.2.3
## NOTE: Either Arial Narrow or Roboto Condensed fonts are required to use these themes.
##       Please use hrbrthemes::import_roboto_condensed() to install Roboto Condensed and
##       if Arial Narrow is not on your system, please see https://bit.ly/arialnarrow
## Loading required package: viridisLite
ggplot(data, aes(x=`Price (USD)`, y=Brand, fill=Brand)) + geom_density_ridges() +
  #COLORING
  scale_fill_viridis(alpha = 0.75, #Opacity
                     begin = 0.1, #Color pallte scale begins
                     end = 0.9, #Color pallte scale ends
                     direction = -1, #Flip color scale
                     discrete = T, #Discrete Value
                     option = "D") + #Color Palette
  theme_modern_rc(axis_title_just = "center", axis_title_size = 12) +
  theme(plot.title = element_text(hjust=0.5),legend.position = "none") +
  labs(x = "\nHarga (USD)",y = "Brand Laptop\n", 
       title = "Sebaran Harga Brand Laptop")
## Picking joint bandwidth of 250
## Warning in grid.Call(C_stringMetric, as.graphicsAnnot(x$label)): font family
## not found in Windows font database
## Warning in grid.Call(C_stringMetric, as.graphicsAnnot(x$label)): font family
## not found in Windows font database

## Warning in grid.Call(C_stringMetric, as.graphicsAnnot(x$label)): font family
## not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database

## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database

## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database

## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database

## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database

## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database

## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database

## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database

## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database

## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, :
## font family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database

summary(data$`Price (USD)`)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##     110     810    1236    1487    1799   11812
summary(data$`Price (IDR)`)
##      Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
##   1689094  12437720  18979121  22838230  27624365 181371689

Dari sebarannya, terlhiat bahwa mayoritas sebaran berdasarkan brand nya, menjulur ke kanan. Artinya lebih banyak harga laptop yang lebih murah daripada yang mahal. Sekitar \(75\%\) laptop harganya dibawah \(1,800\$\) (\(27.6\) jt IDR). Harga laptop paling murah yakni \(110\$\) atau sekitar \(1.7\) jt IDR. Dan Harga laptop paling mahal yakni \(11,812\$\) atau sekitar \(181\) jt IDR.

Contoh Model Linear dengan peubah dummy.

model <- lm(`Price (USD)` ~ `Brand`,data=data)
summary(model)
## 
## Call:
## lm(formula = `Price (USD)` ~ Brand, data = data)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -2707.1  -590.7  -194.7   327.5 10325.9 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)     1273.32      17.15  74.246  < 2e-16 ***
## BrandAcer         79.01      33.73   2.343 0.019172 *  
## BrandAlienware  1107.63     113.54   9.756  < 2e-16 ***
## BrandAorus      2817.81      93.84  30.029  < 2e-16 ***
## BrandApple       842.14     156.58   5.378 7.69e-08 ***
## BrandASUS        212.38      28.87   7.355 2.05e-13 ***
## BrandChuwi      -914.32     972.13  -0.941 0.346965    
## BrandDell         75.68      36.66   2.064 0.039010 *  
## BrandFusion5   -1073.33     972.13  -1.104 0.269574    
## BrandGigabyte   1301.88     132.18   9.849  < 2e-16 ***
## BrandLenovo      -31.68      30.41  -1.042 0.297602    
## BrandLG          249.14      72.39   3.442 0.000581 ***
## BrandMicrosoft   303.93     175.41   1.733 0.083187 .  
## BrandMSI        1148.00      35.91  31.968  < 2e-16 ***
## BrandPanasonic  2512.93     486.29   5.168 2.42e-07 ***
## BrandRazer       895.57     270.12   3.315 0.000918 ***
## BrandSamsung    -288.01     158.60  -1.816 0.069416 .  
## BrandToshiba     715.68     687.50   1.041 0.297908    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 972 on 9973 degrees of freedom
## Multiple R-squared:  0.1777, Adjusted R-squared:  0.1763 
## F-statistic: 126.8 on 17 and 9973 DF,  p-value: < 2.2e-16

Terlihat bahwa tidak ada Brand HP , karena HP dijadikan sebagai referensi sebelumnya.

3. RAM to Numeric

Selanjutnya, kami menghapus “GB RAM” pada RAM dan mengubahnya menjadi numerik agar dapat dianalisis.

data <- data %>%
  mutate(`Ram (GB)` = as.numeric(gsub("GB RAM", "", RAM))) %>%
  select(-RAM)
kable(head(data)) %>% kable_styling(bootstrap_options = "striped", full_width = FALSE)
Name CPU GPU Display Storage Brand Price (USD) Price (IDR) Ram (GB)
Lenovo ThinkPad T14 Gen 2 AMD Ryzen 7 5850U AMD Radeon RX Vega 8 (R4000/5000, 15W) 14.0”, Full HD (1920 x 1080), IPS 2000GB SSD Lenovo 1469.99 22572284 20
HP 17 Intel Core i5-1335U Intel Iris Xe Graphics G7 (80EU) 17.3”, Full HD (1920 x 1080), IPS 1000GB HDD HP 1119.00 17182693 16
Acer Predator Triton 300 Intel Core i7-11800H NVIDIA GeForce RTX 3060 (Laptop, 105W) 15.6”, Full HD (1920 x 1080), 144 Hz, IPS 4000GB SSD Acer 2049.00 31463215 64
ASUS Vivobook 17X AMD Ryzen 7 5800H AMD Radeon RX Vega 8 (R4000/5000, 35/45W) 17.3”, Full HD (1920 x 1080), IPS 2000GB SSD ASUS 969.99 14894584 40
HP 17 Intel Core i5-1335U Intel Iris Xe Graphics G7 (80EU) 17.3”, Full HD (1920 x 1080), IPS 1000GB SSD HP 712.99 10948247 12
Dell Vostro 7620 Intel Core i7-12700H NVIDIA GeForce RTX 3050 (Laptop) 16.0”, WUXGA (1920 x 1200), IPS 512GB SSD Dell 1579.00 24246177 24

a. Sebaran RAM Laptop

# Membuat bar chart persentase
ggplot(data = data %>% count(`Ram (GB)`) %>% # banyaknya laptop brand x
                  mutate(perc = round(n / sum(n) * 100)), #buat persentase, 
       aes(x = reorder(`Ram (GB)`, -n), y = perc)) +
  geom_bar(stat = "identity", fill='#2D99AE') +
  geom_text(aes(label = prettyNum(n,big.mark = ",")
                ), vjust = -0.5, size = 7, col="orange4", 
            fontface = "bold") + # Tambahkan label
  labs(x = "RAM (GB)", y = "Persentase (%)", 
       title = "Sebaran RAM Laptop") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
  scale_y_continuous(labels = scales::percent_format(scale = 1)) +
  theme_minimal() + # Tambahkan tema minimal
  theme(axis.text.x = element_text(angle = 45, hjust = 1, 
                                   margin = margin(b = 1)),
        axis.text.y = element_text(vjust = .5, face = "bold", 
                                   margin = margin(l = 20)),
        plot.title = element_text(hjust = 0.5, vjust =0.5,
                                  face = "bold", margin = margin(b = 50)),
        text = element_text(size = 30),
        plot.subtitle = element_text(hjust = 0.5)
        ) 

Terlihat bahwa RAM laptop terbanyak memiliki kapasitas \(16\)GB, sedangkan yang terkecil adalah \(0\)GB.

Ini memang agak aneh, tapi setelah kami cek kembali, ternyata memang ada laptop dengan RAM \(0\)GB.

4. Storage to Numeric

Setelah itu kami akan mengubah Storage Menjadi numerik dengan cara memisahkan “SSD” & “HDD” ke kolom Storage Type.

storage <- data %>%
mutate(`Storage (GB)` = as.numeric(str_extract(Storage, "\\d+")),
         `Storage Type` = str_extract(Storage, "(SSD|HDD)")) %>% 
  select(`Storage (GB)`,`Storage Type`)
kable(head(storage)) %>% 
  kable_styling(bootstrap_options = "striped", full_width = FALSE)
Storage (GB) Storage Type
2000 SSD
1000 HDD
4000 SSD
2000 SSD
1000 SSD
512 SSD

a. Sebaran Storage Laptop

Pie Chart SSD & HDD

plot.p(dt = storage$`Storage Type`, title = "Porporsi SSD dan HDD")
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.2 ──
## ✔ tibble  3.2.1     ✔ purrr   1.0.2
## ✔ tidyr   1.2.1     ✔ forcats 1.0.0
## ✔ readr   2.1.3
## Warning: package 'tibble' was built under R version 4.2.3
## Warning: package 'purrr' was built under R version 4.2.3
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter()          masks stats::filter()
## ✖ kableExtra::group_rows() masks dplyr::group_rows()
## ✖ dplyr::lag()             masks stats::lag()
## 
## Attaching package: 'scales'
## 
## 
## The following object is masked from 'package:purrr':
## 
##     discard
## 
## 
## The following object is masked from 'package:readr':
## 
##     col_factor
## 
## 
## The following object is masked from 'package:viridis':
## 
##     viridis_pal
## Warning: The `guide` argument in `scale_*()` cannot be `FALSE`. This was deprecated in
## ggplot2 3.3.4.
## ℹ Please use "none" instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

Terlihat bahwa \(94.1\%\) laptop memiliki tipe peyimpanan SSD. Sunggu perbedaan yang sangat jauh.

Sebaran SSD

# Membuat bar chart persentase
ggplot(data = storage %>%
        filter(grepl("SSD", `Storage Type`, ignore.case = TRUE))
        %>% count(`Storage (GB)`) %>% # banyaknya laptop brand x
                  mutate(perc = round(n / sum(n) * 100)), #buat persentase, 
       aes(x = reorder(`Storage (GB)`, -n), y = perc)) +
  geom_bar(stat = "identity", fill='#2D99AE') +
  geom_text(aes(label = prettyNum(n,big.mark = ",")
                ), vjust = -0.5, size = 7, col="orange4", 
            fontface = "bold") + # Tambahkan label
  labs(x = "SSD (GB)", y = "Persentase (%)", 
       title = "Sebaran SSD Laptop") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
  scale_y_continuous(labels = scales::percent_format(scale = 1)) +
  theme_minimal() + # Tambahkan tema minimal
  theme(axis.text.x = element_text(angle = 45, hjust = 1, 
                                   margin = margin(b = 1)),
        axis.text.y = element_text(vjust = .5, face = "bold", 
                                   margin = margin(l = 20)),
        plot.title = element_text(hjust = 0.5, vjust =0.5,
                                  face = "bold", margin = margin(b = 50)),
        text = element_text(size = 30),
        plot.subtitle = element_text(hjust = 0.5)
        ) 

Laptop dengan total penyimpanan \(1000\) GigaByte ( \(1\) TerraByte) SSD merupakan total penyimpanan yang paling banyak dimiliki oleh laptop.

kable(data[data$`Storage` == "16GB SSD", ]) %>% 
  kable_styling(bootstrap_options = "striped", full_width = FALSE)
Name CPU GPU Display Storage Brand Price (USD) Price (IDR) Ram (GB)
HP Chromebook 11 G5 EE Intel Celeron N3060 Intel HD Graphics 400 (Braswell) 11.6”, HD (1280 x 800), TN 16GB SSD HP 195.00 2994303 2
Acer Chromebook 11 (CB3-131) Intel Celeron N2840 Intel HD Graphics (Bay Trail) 11.6”, HD (1366 x 768), IPS 16GB SSD Acer 499.99 7677546 4
Dell Chromebook 11 3181 Intel Celeron N3060 Intel HD Graphics 400 (Braswell) 11.6”, HD (1366 x 768), TN 16GB SSD Dell 287.88 4420513 4
Samsung Chromebook 4 Intel Celeron N4020 Intel UHD Graphics 600 11.6”, HD (1366 x 768), TN 16GB SSD Samsung 164.97 2533180 4
Acer Chromebook 14 (CB3-431) Intel Celeron N3060 Intel HD Graphics 405 (Braswell) 14.0”, HD (1366 x 768), IPS 16GB SSD Acer 199.00 3055725 4
HP Chromebook 11 G6 EE Intel Celeron N3350 Intel HD Graphics 500 (Apollo Lake) 11.6”, HD (1366 x 768), TN 16GB SSD HP 294.02 4514795 4
HP Chromebook 11 G5 Intel Celeron N3050 Intel HD Graphics 400 (Braswell) 11.6”, HD (1366 x 768), IPS 16GB SSD HP 161.00 2472219 2
HP Chromebook 11 (11-v000nr) Intel Celeron N3060 Intel HD Graphics 400 (Braswell) 11.6”, HD (1366 x 768), TN 16GB SSD HP 147.50 2264922 2
ASUS TUF Gaming A17 AMD Ryzen 9 7940HS NVIDIA GeForce RTX 4060 (Laptop, 140W) 17.3”, Full HD (1920 x 1080), 144 Hz, IPS 16GB SSD ASUS 4389.00 67394851 64

Memang agak mengejutkan, bahwa ternyata ada laptop yang hanya memiliki penyimpanan \(16\) GB SSD saja. Tidak ada keterangan Bahwa laptop tersebut memiliki penyimpanan Hybrid dengan tambahan HDD. Namun kami yakin laptop tersebut pasti memiliki penyimpanan HDD tambahan. Karena terlihat bahwa ada laptop yang memiliki Spesifikasi gahar dengan harga yang mahal pula, namun Storage hanya \(16\) GB SSD saja. Laptop tersebut adalah ASUS TUF Gaming A17 dengan harga \(67.4\) jt IDR.

Tapi karena keterbatasan informasi dari data hasil scraping. Kami akan melanjutkan dengan data ini dahulu saja. Jika memungkinkan untuk scraping ulang, maka akan kami scraping ulang.

Sebaran HDD

# Membuat bar chart persentase
ggplot(data = storage %>%
        filter(grepl("HDD", `Storage Type`, ignore.case = TRUE))
        %>% count(`Storage (GB)`) %>% # banyaknya laptop brand x
                  mutate(perc = round(n / sum(n) * 100)), #buat persentase, 
       aes(x = reorder(`Storage (GB)`, -n), y = perc)) +
  geom_bar(stat = "identity", fill='#2D99AE') +
  geom_text(aes(label = prettyNum(n,big.mark = ",")
                ), vjust = -0.5, size = 7, col="orange4", 
            fontface = "bold") + # Tambahkan label
  labs(x = "HDD (GB)", y = "Persentase (%)", 
       title = "Sebaran HDD Laptop") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
  scale_y_continuous(labels = scales::percent_format(scale = 1)) +
  theme_minimal() + # Tambahkan tema minimal
  theme(axis.text.x = element_text(angle = 45, hjust = 1, 
                                   margin = margin(b = 1)),
        axis.text.y = element_text(vjust = .5, face = "bold", 
                                   margin = margin(l = 20)),
        plot.title = element_text(hjust = 0.5, vjust =0.5,
                                  face = "bold", margin = margin(b = 50)),
        text = element_text(size = 30),
        plot.subtitle = element_text(hjust = 0.5)
        ) 

Kebanyakan laptop dengan tipe penyimpanan HDD memiliki total penyimpanan \(1\) TerraByte.

b. Scoring Storage

Scoring merupakan salah satu metode untuk mengurangi adanya autokorelasi pada analsis regresi. Untuk mengurangi adanya autokorelasi pada 2 peubah diatas yakni Storage (GB) dengan Storage Type, Maka kami melakukan scoring dengan mempertimbangkan hal berikut:

  • Dalam hal kinerja, SSD dapat diperkirakan sekitar \(5\) hingga \(10\) kali lebih cepat daripada HDD dalam hal kecepatan baca/tulis data.

  • Dalam hal harga, SSD dapat diperkirakan sekitar \(2\) hingga \(5\) kali lebih mahal per gigabyte dibandingkan HDD.

  • Dalam hal kapasitas, HDD dapat memiliki kapasitas yang lebih besar hingga \(2\) hingga \(4\) kali lipat dari SSD dalam harga yang sama.

Pemberian bobot yang lebih merata dengan menggunakan nilai tengah seperti \(\frac{7.5}{3.5}\) untuk SSD dan \(\frac{3.5}{7.5}\) untuk HDD adalah pendekatan yang lebih seimbang dan simetris. Ini memberikan penekanan yang relatif setara pada kedua faktor, baik kinerja (SSD) maupun kapasitas (HDD).

Pendekatan ini menghindari pemberian bobot yang sangat ekstrem dan cenderung memberikan penilaian yang lebih adil terhadap kedua faktor tersebut.

storage <- storage %>%
  mutate(
    `Storage Score` = ifelse(`Storage Type` == "SSD", `Storage (GB)` * (7.5/3.5), 
                           `Storage (GB)` * (3.5/7.5))
  )
kable(head(storage)) %>% kable_styling(bootstrap_options = "striped", full_width = FALSE)
Storage (GB) Storage Type Storage Score
2000 SSD 4285.7143
1000 HDD 466.6667
4000 SSD 8571.4286
2000 SSD 4285.7143
1000 SSD 2142.8571
512 SSD 1097.1429

c. Merge Data

data <- data %>%
  mutate(`Storage Score` = storage$`Storage Score`)
kable(head(data)) %>% kable_styling(bootstrap_options = "striped", full_width = FALSE)
Name CPU GPU Display Storage Brand Price (USD) Price (IDR) Ram (GB) Storage Score
Lenovo ThinkPad T14 Gen 2 AMD Ryzen 7 5850U AMD Radeon RX Vega 8 (R4000/5000, 15W) 14.0”, Full HD (1920 x 1080), IPS 2000GB SSD Lenovo 1469.99 22572284 20 4285.7143
HP 17 Intel Core i5-1335U Intel Iris Xe Graphics G7 (80EU) 17.3”, Full HD (1920 x 1080), IPS 1000GB HDD HP 1119.00 17182693 16 466.6667
Acer Predator Triton 300 Intel Core i7-11800H NVIDIA GeForce RTX 3060 (Laptop, 105W) 15.6”, Full HD (1920 x 1080), 144 Hz, IPS 4000GB SSD Acer 2049.00 31463215 64 8571.4286
ASUS Vivobook 17X AMD Ryzen 7 5800H AMD Radeon RX Vega 8 (R4000/5000, 35/45W) 17.3”, Full HD (1920 x 1080), IPS 2000GB SSD ASUS 969.99 14894584 40 4285.7143
HP 17 Intel Core i5-1335U Intel Iris Xe Graphics G7 (80EU) 17.3”, Full HD (1920 x 1080), IPS 1000GB SSD HP 712.99 10948247 12 2142.8571
Dell Vostro 7620 Intel Core i7-12700H NVIDIA GeForce RTX 3050 (Laptop) 16.0”, WUXGA (1920 x 1200), IPS 512GB SSD Dell 1579.00 24246177 24 1097.1429

5. Display Classification & Scoring

Setelah Storage, kita lanjut ke peubah selanjutnya yakni Display. Ada beberapa komponen dalam display, terutama pada data yang kami miliki ada 4 komponen, Yakni Screen Size, Resolution, Refresh Rate, dan Screen Type. Kami melakukan pemisahan keempat komponen tersebut menjadi 4 kolom yang berbeda.

a. Refresh Rate

Ada baiknya kita mengetahui bahwa:

  • Refresh rate mengukur berapa kali layar dapat menggambar atau memperbarui gambar per detik, diukur dalam Hertz (Hz).

  • Refresh rate yang lebih tinggi dapat menghasilkan tampilan yang lebih halus, yang bermanfaat dalam gaming dan aplikasi bergerak cepat.

  • Sebagian besar laptop memiliki refresh rate 60Hz, tetapi beberapa laptop gaming mungkin memiliki refresh rate 120Hz atau bahkan lebih tinggi.

Karena kami melihat banyak sekali laptop tanpa refresh rate. Maka kami memutuskan untuk menambahkannya dengan refresh rate minimal pada laptop.

Mengutip dari chat gpt bahwa nilai minimal refresh rate (Hz) pada layar laptop umumnya adalah 60Hz. Layar dengan refresh rate 60Hz sudah cukup umum digunakan dan memberikan tampilan yang lancar untuk sebagian besar tugas komputasi sehari-hari. Beberapa laptop gaming dan monitor mungkin memiliki refresh rate yang lebih tinggi, seperti 120Hz, 144Hz, atau bahkan lebih tinggi, yang dirancang untuk memberikan pengalaman gaming yang lebih halus.

Refresh rate 30Hz mungkin terlalu rendah dan dapat menyebabkan tampilan layar terlihat kurang responsif dan cenderung “berkedip” dalam beberapa kasus. Oleh karena itu, kami memutuskan untuk memberikan nilai 60Hz kepada laptop yang tidak memiliki keterangan refresh rate.

display <- data %>%
  separate(Display, into = c("Screen Size (Inch)", "Resolution", 
                             "Screen Type","Refresh Rate (Hz)" ), 
           sep = ", ", remove = FALSE) %>%
  mutate(
    # Menghapus karakter " dan mengubah menjadi numerik
    `Screen Size (Inch)` = as.numeric(gsub("[^0-9.]", "", `Screen Size (Inch)`)), 
    #Tukar Kolom jika ada hz
    temp = `Refresh Rate (Hz)`,
    #Ubah hz jadi numerik
    `Refresh Rate (Hz)` = ifelse(grepl("Hz", `Screen Type`), 
                                 as.numeric(gsub("[^0-9.]", "", `Screen Type`)), 
                      #Jika tidak ada, beri nilai minimal hz laptop yakni 60 hz
                                 60), 
    `Screen Type` = ifelse(grepl("Hz", `Screen Type`), temp, `Screen Type`)
  ) %>%
  select(`Screen Size (Inch)`, Resolution, `Screen Type`, `Refresh Rate (Hz)`)
## Warning: Expected 4 pieces. Missing pieces filled with `NA` in 6794 rows [1, 2,
## 4, 5, 6, 9, 10, 11, 12, 13, 16, 17, 21, 22, 23, 26, 27, 28, 29, 30, ...].
kable(head(display)) %>% 
  kable_styling(bootstrap_options = "striped", full_width = FALSE)
Screen Size (Inch) Resolution Screen Type Refresh Rate (Hz)
14.0 Full HD (1920 x 1080) IPS 60
17.3 Full HD (1920 x 1080) IPS 60
15.6 Full HD (1920 x 1080) IPS 144
17.3 Full HD (1920 x 1080) IPS 60
17.3 Full HD (1920 x 1080) IPS 60
16.0 WUXGA (1920 x 1200) IPS 60

Cek NA

cat(" Jumlah Screen Size NA  :", sum(is.na(display$`Screen Size (Inch)`)), "\n",
     "Jumlah Resolution NA   :", sum(is.na(display$Resolution)), "\n",
     "Jumlah Screen Type NA  :", sum(is.na(display$`Screen Type`)), "\n",
     "Jumlah Refresh Rate NA :", sum(is.na(display$`Refresh Rate (Hz)`)), "\n"
    )
##  Jumlah Screen Size NA  : 0 
##  Jumlah Resolution NA   : 0 
##  Jumlah Screen Type NA  : 27 
##  Jumlah Refresh Rate NA : 0
na.idx <- which(is.na(display[,3]), arr.ind = TRUE)
kable(data[ unique(na.idx[, 1]), unique(na.idx[, 2]) +3 ]) %>% 
  kable_styling(bootstrap_options = "striped", full_width = FALSE)
Display
14.2”, Liquid Retina (3024 x 1964), 120 Hz
16.2”, Liquid Retina (3456 x 2234), 120 Hz
13.5”, PixelSense (2256 x 1504)
16.2”, Liquid Retina (3456 x 2234), 120 Hz
16.2”, Liquid Retina (3456 x 2234), 120 Hz
14.2”, Liquid Retina (3024 x 1964), 120 Hz
15.6”, Full HD (1920 x 1080)
14.2”, Liquid Retina (3024 x 1964), 120 Hz
14.2”, Liquid Retina (3024 x 1964), 120 Hz
14.2”, Liquid Retina (3024 x 1964), 120 Hz
13.5”, PixelSense (2256 x 1504)
13.5”, PixelSense (2256 x 1504)
14.2”, Liquid Retina (3024 x 1964), 120 Hz
16.2”, Liquid Retina (3456 x 2234), 120 Hz
16.2”, Liquid Retina (3456 x 2234), 120 Hz
16.2”, Liquid Retina (3456 x 2234), 120 Hz
13.5”, PixelSense (2256 x 1504)
13.5”, PixelSense (2256 x 1504)
15.6”, Full HD (1920 x 1080)
14.2”, Liquid Retina (3024 x 1964), 120 Hz
13.5”, PixelSense (2256 x 1504)
13.5”, PixelSense (2256 x 1504)
16.2”, Liquid Retina (3456 x 2234), 120 Hz
15.6”, Full HD (1920 x 1080)
14.2”, Liquid Retina (3024 x 1964), 120 Hz
14.2”, Liquid Retina (3024 x 1964), 120 Hz
16.2”, Liquid Retina (3456 x 2234), 120 Hz

b.1 Tipe Layar

Penting untuk mengetahui bahwa:

  • Tipe layar mengacu pada teknologi yang digunakan dalam pembuatan layar.

  • Beberapa tipe layar umum meliputi:

    • IPS (In-Plane Switching): Layar jenis ini dikenal dengan sudut pandang yang luas dan reproduksi warna yang baik.

    • OLED (Organic Light-Emitting Diode): OLED menghasilkan warna yang kaya dan kontras tinggi.

    • LCD (Liquid Crystal Display): Layar LCD adalah jenis yang umum dan cenderung lebih terjangkau.

    • TN (Twisted Nematic): Biasanya digunakan dalam layar murah dan memiliki sudut pandang yang lebih terbatas.

  • Tipe layar dapat mempengaruhi kualitas tampilan, reproduksi warna, dan sudut pandang.

Seperti yang kita lihat pada ###Cek NA, Yang NA Hanya tersisa pada Screen Type saja. Karena setiap layar pasti memiliki tipe nya oleh karena itu kami menanyakan kepada chat gpt “Apa tipe layar minimal pada laptop?” Berikut ulasannnya :
Tipe layar minimal laptop adalah layar LCD (Liquid Crystal Display). Layar LCD adalah teknologi layar yang paling umum digunakan dalam laptop dan perangkat komputer lainnya. LCD menggunakan kristal cair yang berada di antara dua lapisan kaca yang kemudian dikendalikan untuk mengatur cahaya dan menghasilkan gambar.

Dengan demikian kami memutuskan untuk menambahkan Tipe LCD ke kolom Screen Type yang NA

display <- display %>% 
  mutate(`Screen Type` = ifelse(is.na(`Screen Type`), "LCD", `Screen Type`))
kable(
  display %>%
  group_by(`Screen Type`) %>%
  summarise(Total = n())
) %>%  kable_styling(bootstrap_options = "striped", full_width = FALSE)
Screen Type Total
IPS 7944
LCD 27
OLED 338
TN 1682

b.2 Screen Type Value Number

Setelah melihat semua tipe layar yang ada, kami ingin mengubah tipe layar tersebut menjadi numerik berdasarkan kualitas nilai mereka. Kami meminta bantuan chat gpt untuk memberikan nilai tersebut. Sebelum itu penting untuk mengetahui kualitas tipe layar yang ada, sebagai berikut:

  1. OLED (Organic Light-Emitting Diode):

    • OLED memiliki kualitas gambar yang luar biasa dengan kontras yang sangat tinggi, warna yang tajam, dan sudut pandang yang luas.

    • Reproduksi warna pada layar OLED sangat akurat dan hidup.

    • Tidak ada pencahayaan latar belakang, sehingga hitam murni dan kecerahan yang luar biasa.

    • Biasanya digunakan dalam TV premium dan beberapa monitor kelas atas.

  2. IPS (In-Plane Switching):

    • IPS menawarkan reproduksi warna yang sangat baik dan sudut pandang yang luas.

    • Kontras yang baik dan gambar yang tajam, meskipun tidak sebaik OLED.

    • Digunakan dalam monitor profesional, laptop, dan beberapa TV.

  3. LCD (Liquid Crystal Display):

    • LCD dengan panel IPS atau VA dapat memberikan kualitas gambar yang baik dengan harga yang lebih terjangkau.

    • Kualitas gambar bisa bervariasi tergantung pada jenis panel LCD.

    • Digunakan dalam berbagai perangkat, termasuk monitor, laptop, dan TV.

  4. TN (Twisted Nematic):

    • TN memiliki waktu respon yang sangat cepat, cocok untuk permainan.

    • Namun, sudut pandang yang terbatas dan reproduksi warna yang kurang akurat.

    • Digunakan dalam monitor gaming yang terjangkau.

Sehingga jika diberi nilai akan menjadi:

  1. OLED (Organic Light-Emitting Diode): 9

    • OLED memiliki kualitas gambar terbaik dengan kontras tinggi, warna hidup, dan sudut pandang yang luas. Oleh karena itu, kita memberikan nilai tertinggi.
  2. IPS (In-Plane Switching): 7

    • IPS menawarkan kualitas gambar yang sangat baik dan sudut pandang yang luas, meskipun tidak sebaik OLED. Tetapi nilai ini tetap tinggi karena IPS masih merupakan pilihan yang sangat baik.
  3. LCD (Liquid Crystal Display): 5

    • LCD dengan panel IPS atau VA dapat memberikan kualitas gambar yang baik dengan harga yang lebih terjangkau. Nilai ini mencerminkan kualitas yang baik tetapi tidak sebaik OLED atau IPS.
  4. TN (Twisted Nematic): 3

    • TN memiliki waktu respon yang cepat, tetapi sudut pandang yang terbatas dan reproduksi warna yang kurang akurat. Oleh karena itu, nilai ini lebih rendah.
display <- display %>%
  mutate(
    `Screen Type` = case_when(
      `Screen Type` == "OLED" ~ "9",  `Screen Type` == "IPS" ~ "7",   
      `Screen Type` == "LCD" ~ "5",   `Screen Type` == "TN" ~ "3",    
      TRUE ~ `Screen Type`
    ), `Screen Type` = as.numeric(`Screen Type`)
  )
kable(head(display)) %>% 
  kable_styling(bootstrap_options = "striped", full_width = FALSE)
Screen Size (Inch) Resolution Screen Type Refresh Rate (Hz)
14.0 Full HD (1920 x 1080) 7 60
17.3 Full HD (1920 x 1080) 7 60
15.6 Full HD (1920 x 1080) 7 144
17.3 Full HD (1920 x 1080) 7 60
17.3 Full HD (1920 x 1080) 7 60
16.0 WUXGA (1920 x 1200) 7 60

c.1 Resolusi layar

Penting untuk mengetahui apa itu resolusi layar.

  • Resolusi adalah jumlah piksel yang dapat ditampilkan pada layar.

  • Resolusi umumnya diukur dalam format “lebar x tinggi” (misalnya, 1920 x 1080), yang menunjukkan jumlah piksel horizontal dan vertikal yang terdapat pada layar.

  • Semakin tinggi resolusi, semakin tajam dan detail tampilan gambar dan teksnya.

Karena kami lihat banyak sekali jenis resolusi layar yang punya nama, jadi kami memutuskan untuk melihat semua jenis nya.

kable(
  display %>%
  group_by(`Resolution`) %>%
  summarise(Total = n())
) %>%  kable_styling(bootstrap_options = "striped", full_width = FALSE)
Resolution Total
QHD (2560 x 1440) 63
(2496 x 1664) 3
(2560 x 1664) 5
2.2K (2240 x 1400) 25
2.5K (2560 x 1440) 1
2.8K (2880 x 1620) 7
2.8K (2880 x 1800) 85
2K (2256 x 1504) 8
3.2K (3200 x 2000) 12
3.5K (3456 x 2160) 8
3K (2880 x 1800) 5
3K (3000 x 2000) 7
3K (3072 x 1920) 48
3K (3240 x 2160) 3
3K2K (3000 x 2000) 1
3К (2736 x 1824) 4
4K UHD (3840 x 2160) 110
4K UHD (3840 x 2400) 4
4K UHD+ (3840 x 2400) 4
FHD (1920 x 1080) 131
FHD (1920 x 1200) 5
FHD (1920x1080) 2
FHD+ (1920 x 1200) 158
FHD+ (1920 x 1280) 4
FHD+ (2160 x 1440) 2
Full HD (1920 x 1080) 5926
HD (1280 x 800) 1
HD (1366 x 768) 1027
HD+ (1366 x 912) 2
HD+ (1600 x 900) 349
Liquid Retina (2880 x 1864) 7
Liquid Retina (3024 x 1964) 9
Liquid Retina (3456 x 2234) 8
PixelSense (1536 x 1024) 3
PixelSense (2256 x 1504) 7
PixelSense (2880 x 1920) 2
PixelSense Flow (2400 x 1600) 1
QHD (2560 x 1440) 259
QHD (2560 x 1600) 94
QHD+ (2560 x 1600) 119
QHD+ (3000 x 2000) 2
QHD+ (3200 x 1800) 2
UHD+ (3840 x 2400) 30
WQHD (2160 x 1350) 3
WQHD (2560 x 1440) 139
WQHD+ (2880 x 1800) 1
WQUXGA (3840 x 2400) 75
WQUXGA (3840 x 2400) 36
WQXGA (2560 x 1600) 593
WQXGA (2560 x 1600) 8
WUXGA (1920 x 1200) 570
WUXGA (1920 x 1280) 2
WUXGA+ (1920 x 1280) 11

Terlihat bahwa semua namanya adalah seberapa besar kualitas resolusinya, Kecuali PixelSense.

PixelSense adalah tipe layar yang digunakan pada perangkat Microsoft Surface. Ini adalah layar sentuh yang sangat responsif dan mendukung penggunaan pena digital. Layar ini dirancang untuk produktivitas dan kreativitas.

Karena perbedaan inilah, kami memutuskan untuk memberikan bobot pada tipe layar PixelSense, dengan PixelSense \((1.125)\) dan PixelSense Flow \((1.25)\).

“PixelSense” dan “PixelSense Flow” memiliki karakteristik yang berbeda dalam hal kualitas gambar atau kemampuan layarnya. Sehingga memberikan bobot yang sedikit lebih tinggi kepada “PixelSense Flow” \((1.25)\) cukup mencerminkan perbedaan ini.

c.2 Multiply Resolution

Setelah eksplorasi tentang macam-macam tipe layar dan memberi bobot pada mereka, kami akan mengalikan resolusi tersebut. Sehingga resmi menjadi peubah numerik.

display <- display %>% 
  mutate( # Mencari semua kemungkinan pasangan angka dalam kolom "Resolution"
    Resolution_Num = str_extract_all(Resolution, "\\d{2,}"),
    # Mengambil pasangan angka yang memiliki dua angka di dalamnya
    Resolution_Num = sapply(Resolution_Num, 
                            function(x) if (length(x) == 2) paste(x, collapse = "x") else NA)
  ) %>% # Pisahkan "Width" dan "Height" dari "Resolution_Num"
  separate(Resolution_Num, into = c("Width", "Height"), sep = "x", 
           convert = TRUE, remove = FALSE) %>% 
# Berikan bobot jika ada kata PixelSense dalam kolom resolusi
  mutate(
    Resolution = ifelse(grepl("PixelSense", Resolution), 
                              Width * Height * 1.125, 
                              Width * Height)
  ) %>% select(-Resolution_Num, -Width, -Height) 
kable(head(display)) %>%  kable_styling(bootstrap_options = "striped", full_width = FALSE)
Screen Size (Inch) Resolution Screen Type Refresh Rate (Hz)
14.0 2073600 7 60
17.3 2073600 7 60
15.6 2073600 7 144
17.3 2073600 7 60
17.3 2073600 7 60
16.0 2304000 7 60

d. Display Score

Akhirnya setelah mengubah keempat peubah display diatas menjadi numerik, kami akan menghitung total score yang dimiliki. Scoring merupakan salah satu metode untuk mengurangi adanya autokorelasi pada analsis regresi. Adapun formula untuk display score:

\[ \frac{\mathbf{Resolution\times Screen.Type}} {\mathbf{Screen.Size}} + \mathbf{Refresh.Rate} \]

Resolution dan Screen Type merupakan hal yang berfokus pada kualitas visual dan bisa dipadukan satu sama lain. Akan tetapi hal itu akan sia-sia jika Screen Size nya kecil. Bayangkan anda memiliki resolusi dan tipe layar yang tinggi, namun ukuran layar anda kecil. Apa yang ingin anda liat? Apakah anda menatap layar sangat dengat dengan mata anda? Tentu saja tidak!

Berbeda dengan Refresh Rate yang berfokus pada kecepatan layar. Baik kualitas visual maupun ukuran tidak terlalu mempengaruhi nilai nya. Sehingga kaidah score nya dibuat terpisah dengan penjumlahan.

display <- display %>% 
  mutate_all(rescale, to = c(10, 100)) %>% 
  mutate(`Display Score` = ((Resolution * `Screen Type`) / 
                             `Screen Size (Inch)`) + `Refresh Rate (Hz)`)
kable(head(display)) %>% 
  kable_styling(bootstrap_options = "striped", full_width = FALSE)
Screen Size (Inch) Resolution Screen Type Refresh Rate (Hz) Display Score
67.27273 21.53125 70 10 32.40414
94.27273 21.53125 70 10 25.98752
80.36364 21.53125 70 28 46.75460
94.27273 21.53125 70 10 25.98752
94.27273 21.53125 70 10 25.98752
83.63636 24.06250 70 10 30.13927

Merge Data

data <- data %>% bind_cols(`Display Score` = display$`Display Score`)
kable(head(data)) %>% 
  kable_styling(bootstrap_options = "striped", full_width = FALSE)
Name CPU GPU Display Storage Brand Price (USD) Price (IDR) Ram (GB) Storage Score Display Score
Lenovo ThinkPad T14 Gen 2 AMD Ryzen 7 5850U AMD Radeon RX Vega 8 (R4000/5000, 15W) 14.0”, Full HD (1920 x 1080), IPS 2000GB SSD Lenovo 1469.99 22572284 20 4285.7143 32.40414
HP 17 Intel Core i5-1335U Intel Iris Xe Graphics G7 (80EU) 17.3”, Full HD (1920 x 1080), IPS 1000GB HDD HP 1119.00 17182693 16 466.6667 25.98752
Acer Predator Triton 300 Intel Core i7-11800H NVIDIA GeForce RTX 3060 (Laptop, 105W) 15.6”, Full HD (1920 x 1080), 144 Hz, IPS 4000GB SSD Acer 2049.00 31463215 64 8571.4286 46.75460
ASUS Vivobook 17X AMD Ryzen 7 5800H AMD Radeon RX Vega 8 (R4000/5000, 35/45W) 17.3”, Full HD (1920 x 1080), IPS 2000GB SSD ASUS 969.99 14894584 40 4285.7143 25.98752
HP 17 Intel Core i5-1335U Intel Iris Xe Graphics G7 (80EU) 17.3”, Full HD (1920 x 1080), IPS 1000GB SSD HP 712.99 10948247 12 2142.8571 25.98752
Dell Vostro 7620 Intel Core i7-12700H NVIDIA GeForce RTX 3050 (Laptop) 16.0”, WUXGA (1920 x 1200), IPS 512GB SSD Dell 1579.00 24246177 24 1097.1429 30.13927

Referensi